package com.liru.chat_demo.repository;

import com.liru.chat_demo.model.McpServer;
import org.springframework.stereotype.Repository;

import java.util.Collection;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;

/**
 * MCP服务器的内存仓库
 */
@Repository
public class McpServerRepository {
    // 使用ConcurrentHashMap存储服务器信息，保证线程安全
    private final Map<String, McpServer> servers = new ConcurrentHashMap<>();

    /**
     * 保存或更新MCP服务器
     * @param server 要保存或更新的服务器
     * @return 保存后的服务器
     */
    public McpServer save(McpServer server) {
        // 将服务器存入Map，键为服务器ID，值为服务器对象
        servers.put(server.getId(), server);
        // 返回保存的服务器
        return server;
    }

    /**
     * 根据ID查找MCP服务器
     * @param id 服务器ID
     * @return 找到的服务器，如果未找到则返回空
     */
    public Optional<McpServer> findById(String id) {
        // 从Map中获取指定ID的服务器，如果不存在则返回null，包装成Optional返回
        return Optional.ofNullable(servers.get(id));
    }

    /**
     * 查找所有MCP服务器
     * @return 所有服务器的集合
     */
    public Collection<McpServer> findAll() {
        // 返回所有服务器的值集合
        return servers.values();
    }

    /**
     * 查找所有启用的MCP服务器
     * @return 所有启用的服务器集合
     */
    public Collection<McpServer> findAllEnabled() {
        // 获取所有服务器值的流，过滤出启用的服务器，转换为列表返回
        return servers.values().stream()
                .filter(McpServer::isEnabled)
                .toList();
    }

    /**
     * 根据ID删除MCP服务器
     * @param id 服务器ID
     */
    public void deleteById(String id) {
        // 从Map中移除指定ID的服务器
        servers.remove(id);
    }
}